package com.example.nccdeploytool.util;

import com.example.nccdeploytool.HelloApplication;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

import java.io.IOException;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * @author 15037
 * @description
 * @date 2025-07-02 15:41
 */
public class FXUtil {


    // 在主窗口的控制器或主类中
    public static void openWindow(String title, String fxmlName) {
        try {
            // 创建新的Stage
            Stage newStage = new Stage();

            // 设置标题
            newStage.setTitle(title);
            newStage.setX(HelloApplication.getPrimaryStage().getX() + 50);
            newStage.setY(HelloApplication.getPrimaryStage().getY() + 50);

            // 设置场景
            FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource(fxmlName));
            Scene scene = new Scene(fxmlLoader.load(), 820, 640);
            newStage.setScene(scene);

            // 设置模态（可选）
            newStage.initModality(Modality.APPLICATION_MODAL); // 阻止与其他窗口交互

            // 设置所有者窗口（可选）
            newStage.initOwner(HelloApplication.getPrimaryStage()); // primaryStage是主窗口的Stage

            // 显示窗口
            newStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void addFxmlTab(TabPane tabPane, String tabName, String fxmlPath, BiConsumer<Event, Object> onClose) {
        try {
            // 加载 FXML 文件
            FXMLLoader loader = new FXMLLoader(HelloApplication.class.getResource(fxmlPath));
            Parent root = loader.load();

            Object controller = loader.getController();

            // 创建 Tab 并设置内容
            Tab tab = new Tab(tabName);
            tab.setContent(root);
            tab.setClosable(true); // 允许关闭

            tab.setOnClosed(event -> {
                onClose.accept(event, controller);
            });

            // 添加到 TabPane
            tabPane.getTabs().add(tab);

            // 选中
            tabPane.getSelectionModel().select(tab);
        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("无法加载 FXML 文件: " + fxmlPath);
        }
    }

}
